package listbyorder.access101_200.test179;

import java.util.Arrays;
import java.util.Comparator;

/**
 * @author code_yc
 * @version 1.0
 * @date 2020/6/15 10:13
 */
public class Solution2 {

    // 方法二： 使用自己写的比较器进行排序
    public String largestNumber(int[] nums) {

        Integer[] n = new Integer[nums.length];

        // 自动装箱操作
        for (int i = 0; i < nums.length; i++) {
            n[i] = nums[i];
        }

        Arrays.sort(n, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                int len1 = (o1 + "").length();
                int len2 = (o2 + "").length();
                //如果两个数字的长度一样
                if (len1 == len2) {
                    if (o1 > o2) {
                        return -1;
                    } else if (o1 < o2) {
                        return 1;
                    } else {
                        return 0;
                    }
                }
                // 走到这里两个数字的长度肯定不一样
                int c1 = (int) (o1 * Math.pow(10, len2)) + o2;
                int c2 = (int) (o2 * Math.pow(10, len1)) + o1;
                if (c1 > c2) {
                    return -1;
                } else if (c1 < c2) {
                    return 1;
                } else {
                    return 0;
                }
            }
        });

        StringBuilder sb = new StringBuilder();
        for (Integer num : n) {
            sb.append(num);
        }
        String ans = sb.toString();
        return ans.charAt(0) == '0' ? "0" : ans;
    }
}
